/*
给你一个文件 file ，并且该文件只能通过给定的 read4 方法来读取，请实现一个方法使其能够使 read 读取 n 个字符。注意：你的 read 方法可能会被调用多次。

read4 的定义：

read4 API 从文件中读取 4 个连续的字符，然后将这些字符写入缓冲区数组 buf4 。

返回值是读取的实际字符数。

请注意，read4() 有其自己的文件指针，类似于 C 中的 FILE * fp 。

    参数类型: char[] buf4
    返回类型: int

注意: buf4[] 是目标缓存区不是源缓存区，read4 的返回结果将会复制到 buf4[] 当中。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/read-n-characters-given-read4-ii-call-multiple-times
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/

/**
 * The read4 API is defined in the parent class Reader4.
 *     int read4(char *buf4);
 */

class Solution {
public:
    /**
     * @param buf Destination buffer
     * @param n   Number of characters to read
     * @return    The number of actual characters read
     */
    int index=0;
    int remain=0;
    char tmp[4];
    bool init=true;
    int read(char *buf, int n) {
        if(init){
            remain=read4(tmp);
            init=false;
        }
        int i=0;
        while(i<n&&i<remain){
            buf[i++]=tmp[index%4];
            index++;
            if(index%4==0){
                remain+=read4(tmp);
            }
        }
        remain-=i;
        return i;
    }
};